using System;
using System.Collections.Generic;
using DoubanFM.ViewModel;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace DoubanFM.View
{
    /// <summary>
    /// A page that displays a grouped collection of items.
    /// </summary>
    public sealed partial class GroupedChannelsPage
    {
        private readonly DataSource _dataSource = DataSource.Instance;

        public GroupedChannelsPage()
        {
            InitializeComponent();
            // LongkerDandy: seems xaml doesn't handle escape unicode string well, so I put it here
            DefaultViewModel["AppName"] = "\u8C46\u74E3" + "FM";
        }

        /// <summary>
        /// Populates the page with content passed during navigation.  Any saved state is also
        /// provided when recreating a page from a prior session.
        /// </summary>
        /// <param name="navigationParameter">The parameter value passed to
        /// <see cref="Frame.Navigate(Type, Object)"/> when this page was initially requested.
        /// </param>
        /// <param name="pageState">A dictionary of state preserved by this page during an earlier
        /// session.  This will be null the first time a page is visited.</param>
        protected override async void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
        {
            // Show progress bar
            updateProgess.Visibility = Visibility.Visible;
            // Refresh Data Source
            await _dataSource.NewChannelList(false);
            // Hide progress bar when finished
            updateProgess.Visibility = Visibility.Collapsed;

            // Update ViewModel
            var channelDataGroups = _dataSource.GetGroups((String)navigationParameter);
            DefaultViewModel["ChannelGroups"] = channelDataGroups;
        }

        /// <summary>
        /// Invoked when a group header is clicked.
        /// </summary>
        /// <param name="sender">The Button used as a group header for the selected group.</param>
        /// <param name="e">Event data that describes how the click was initiated.</param>
        void HeaderClick(object sender, RoutedEventArgs e)
        {
            // Determine what group the Button instance represents
            var group = (sender as FrameworkElement).DataContext;

            // Navigate to the appropriate destination page, configuring the new page
            // by passing required information as a navigation parameter
            //this.Frame.Navigate(typeof(GroupDetailPage), ((ChannelGroupViewModel)group).UniqueId);
        }

        /// <summary>
        /// Invoked when an item within a group is clicked.
        /// </summary>
        /// <param name="sender">The GridView (or ListView when the application is snapped)
        /// displaying the item clicked.</param>
        /// <param name="e">Event data that describes the item clicked.</param>
        void ItemViewItemClick(object sender, ItemClickEventArgs e)
        {
            // Navigate to the appropriate destination page, configuring the new page
            // by passing required information as a navigation parameter
            var itemId = ((ChannelItemViewModel)e.ClickedItem).UniqueId;
            Frame.Navigate(typeof(ChannelPage), itemId);
        }
    }
}
